CASTILLO MALDITO  **FICHA tECNICA**
------------------------------------

Como Surgio la Idea
-------------------

Castillo Maldito fue uno de los primeros juegos que intente realizar encuanto supe algo de programacion en Basic, alla por el ao '88, antes ya habia realizado otros minijuegos con los pocos conocimientos que tenia, sin embargo y como suele pasar nunca termine casi ningun juego de los que intentaba realizar bien por aburrimiento o bien por las limitaciones de conocimientos Basic que tenia.
Asi pues, este juego lo tenia a medias, con solo unas pocas pantallas aunque el movimiento en general lo tenia mas o menos bien desarrollado y el desarrollo del juego seguia en mi cabeza.
Fue gracias a internet y los emuladores cuando no hace mucho vi que Radastan organizaba un concurso en su web sobre juegos en Basic para Spectrum y me dio la venilla de desemplovar mi querido 128k para terminar algun jueguecillo de los que tenia empezados.
Elegi Castillo Maldito por varios motivos, no era muy complicado de terminar pues se trata de un juego de plataformas, siempre me gusto el aspecto del juego, y los conocimientos que tengo hoy en dia en Basic me permitian hacer practicamente todo lo que tenia pensado para el juego.
Me puse manos a la obra y en 4 o 5 dias lo tuve terminado, ocupe los 48k de memoria que puede manejar el z80, y me hubiera gustado llegar hasta los 128k para poner muchas mas pantallas y hacer el juego mas largo, pero... pense que la mayoria jugara en emuladores y la manera de acceder a mas de 48k en Basic es usando el disco de memoria virtual del 128k llamado disco m:, esto es una manera de paginar la memoria desde basic, pero el problema viene con los emuladores, ya que la mayoria no aceptan este disco virtual y el juego no funcionaria,asi que decidi hacerlo solo de 48k para no tener problemas con los emuladores.

Datos Tecnicos del Juego
-------------------------
Si mirais el listado vereis que esta muy desorganizado y que uno se puede perder con facilidad tratando de comprender como funciona el programa,pero cuando empece el juego no tenia mucha experiencia en Basic y hacia las cosas como podia mientras funcionara y al retomar el juego el ao pasado no quise cambiar la estructura original y terminarlo del mismo modo que lo empece, aunque hoy en dia podria haber reducido la memoria que ocupa a algo mas de la mitad.
Cada programador tiene su forma peculiar de hacer las cosas, voy a explicar como lo hago yo para que entendais como funciona el juego.
La deteccion de pulsaciones de teclas para el movimiento lo realizo mediante instrucciones IN ya que INKEY$ no me permitia el movimiento en diagonal pues solo funciona con una tecla al mismo tiempo, encambio IN detecta mas de una a la vez, asi en las pantallas en las que Bill esta bajo el agua es posible nadar en diagonal o cuando esta fuera, puedes saltar sin soltar las teclas de iquierda o derecha.
Para la deteccion de objetos y monstruos mayormente uso la instruccion ATTR que me dice los atributos de cualquier caracter de la pantalla,asi pues si los atributos del caracter al que tiene que moverse Bill son diferentes del color del fondo hago que no pueda avanzar mas, esta instruccion tiene el inconveniente de que si por ejemplo pones que un "bicho" de color rojo con fondo blanco te mate al tocarte, cualquier otra cosas roja con fondo blanco la tratara como si fuere un "bicho" y tambien te matara, pero bien usada y con cuidado me parece la mejor opccion para detectar objetos.
Otra caracteristica que llama la atencion del juego es que Bill puede pasar de un fondo blanco al fondo azul parpadeante del agua, esto lo consegui mediante una variable alfanumeria para el borrado de Bill antes de que aparezca en la nueva posicion, me explico: el rastro que borra a bill no lo podia poner siempre blanco pues en el agua hubiera aparecido cuadros blancos en lugar de los azules del agua, para ello puse como variable que borra a Bill a$ por ejemplo, despues comparaba el fondo del escenario, si era blanco a$ pasaba a ser un cuadro blanco y borraba a Bill de esa manera, pero si era azul ponia a a$ como el GDU del agua asi lo borraba con una caracter de agua y el color lo sacaba con ATTR, se que esto es un poco lioso y ademas se pierde tiempo de calculo, pero el resultado final es mucho mas llamativo.
Para el paso de una pantalla a otra no me complique mucho, cada 100 lineas de listado cree una pantalla ,asi si hay 24 pantallas en total  es facil saber donde esta la 15 por ejemplo 15*100=1500 en la linea 1500 esta la pantalla 15, despues en cada pantalla solo tengo que comparar si la coordenada x (que es la que uso para el movimiento orizontal) estaba al principio o al final de la pantalla y despues hacia un GO TO a la anterio o siguente pantalla segun correspondia.
El listado esta llego de comparaciones del tipo IF THEN ,se que esto ralentiza el calculo pero era la unica forma que conocia en el ao 89 y asi lo hice todo.
Por ultimo el parpadeo de Bill es debido a que al final cambie un poco la forma de borrarlo para acelerar el movimiento, en una version anterior Bill no parpadeaba, pero el movimiento era lentisimo, asi que opte por borrar a Bill justo antes de calcular la nueva posicion,para despues hacerlo reaparecer donde tocaba, estre tiempo de calculo es en el que Bill no aparce en pantalla, no es excesivo y consegui acelerar casi un 50% la rapidez de movimiento al ahorrarme algunas instrucciones.
Otra cosa en la que trabaje mucho fue en que Bill no borrara ningun caracter de escenario, esto suele pasar muy a menudo cuando solo haces movimiento y comparaciones pues a veces compara despues de mover el sprite por fallo en la estructura del programa, yo me dedique mucho a comparar "todo" antes de mover a Bill aunque tardara un poco mas el resultado es que practicamente no existe un bug en el que te puedas comer algo de escenario.
Y en definitiva esto es todo, espero que disfruteis del juego tanto como yo y trateis de terminarlo.


P.D.Si veis demasiado dificil el juego podeis poneros mas vidas alterando la variable vidas, para ello poned 91 Let vidas=x (donde x es el numero de vidas que quereis trener, si quereis 100 vidas cambiar x por el numero 100)
  